草庐IT

c++ - QML Qt openUrlExternally

全部标签

c++ - 在不修改 .h 文件的情况下处理宏重新定义 ... C/C++ 语言

背景:假设我有两个头文件a.h和b.h。a.h包含:#defineVAR1b.h包含:#defineVAR2注意:两个宏的名称相同。假设我有一些文件myFile.c,其中包含两个头文件,即a.h和b.h。当我尝试访问VAR时,出现VAR重定义错误。为了解决这个问题,我在a.h和b.h文件中都插入了#ifndefVAR语句来防止这个错误。a.h文件变为#ifndefVAR#defineVAR1#endifb.h文件变为#ifndefVAR#defineVAR2#endif注意:头文件可以包含多个宏,不能只有一个宏。问题:假设a.h和b.h文件是从第三方库中获取的。这些文件不包含#ifnd

c++ - 在 C/C++ 中解析二进制消息流

我正在为二进制协议(protocol)(JavadGRIL协议(protocol))编写解码器。它由大约一百条消息组成,数据格式如下:structMsgData{uint8_tnum;floatx,y,z;uint8_televation;...};这些字段是ANSI编码的二进制数字,它们彼此紧随其后,没有间隙。解析此类消息的最简单方法是将输入的字节数组转换为适当的类型。问题是流中的数据是打包的,即未对齐。在x86上,这可以通过使用#pragmapack(1)来解决。但是,这在其他一些平台上不起作用,或者由于进一步处理未对齐的数据而导致性能开销。另一种方法是为每种消息类型编写一个特定的

c++ - 对 __cdecl 和 __stdcall 调用约定感到困惑

__cdecl调用约定说:callercleanupstack.__stdcall调用约定说:被调用者清理堆栈。所以我尝试测试下面的代码:#includechar*callee(){charstr[]="abcd";returnstr;}intmain(){char*str;str=callee();printf("%s\n",str);return0;}根据上面的两种调用约定,我认为:__cdecl调用者清理堆栈,因此printf("%s\n",str)应该输出“abcd”。__stdcall由被调用方清理堆栈,因此printf("%s\n",str)应该输出困惑的字符。但实际上,两

c++ - 用非零值初始化 double 组 (blas)

我已经分配了一个很大的双vector,假设有100000个元素。在我的代码中的某个时刻,我想将所有元素设置为一个常量、非零值。如果不对所有元素使用for循环,我该如何做到这一点?如果有帮助,我也在使用blas包。 最佳答案 你可以使用std::fill(#include):std::fill(v.begin(),v.end(),1);当然这本质上也只是一个循环.. 关于c++-用非零值初始化double组(blas),我们在StackOverflow上找到一个类似的问题:

c++ - 哪些用例需要 #define 而不使用标记字符串?

之前在学习C的时候遇到过#define预处理器指令,后来在看的一些代码中也遇到过。但是除了用它来确定常量的替换和定义宏之外,我还没有真正理解它在没有“主体”或标记字符串的情况下使用的特殊情况。以这一行为例:#defineOCSTR(X)就是这样!这个或更好的用途是什么,什么时候需要使用#define? 最佳答案 这用于两种情况。第一个也是最常见的涉及条件编译:#ifndefXYZ#defineXYZ//...#endif你肯定自己用过它来包含守卫,但它也可以是用于诸如系统依赖之类的事情:#ifdefWIN32//Windowsspe

c++ - 使用 Windows 内置的 MP3 解码器播放音频?

我如何从C或C++使用自WindowsMediaPlayer6.1以来Windows内置的MP3解码器?我想播放mp3文件而不必依赖任何其他第三方库,例如LAME.DLL。我更新了问题以更好地符合我得到的答案,因为我非常喜欢它们。Relatedquestion. 最佳答案 当然。与WindowsAPI中的许多其他内容一样,播放.mp3文件的方法不止一种。以编程方式执行此操作的“最简单”方法是使用DirectShow。MSDN文档甚至在恰本地称为"HowToPlayaFile"的页面上包含了一个最小的代码示例。让你开始://Visua

c++ - 无法将 LIBEVENT 链接为 C++

为什么这不起作用,文件test.c:#includeintmain(void){event_init();return0;}然后:gcc-otest.o-ctest.c运行正常,但是链接:g++-otest-leventtest.o产生test.o:Infunction`main':test.c:(.text+0x5):undefinedreferenceto`event_init'collect2:ldreturned1exitstatus所以它不能链接为C++。如何解决这个问题?我需要将其链接为C++并编译为C。 最佳答案 这个

c++ - gcc -lpthread 不工作

我的系统中安装了ubuntu11。我有一个使用pthread库的c程序。我收到错误Undefinedreferencetosem_wait()即使我使用标志-lpthread编译。例如:gcc-lpthreadprog.c该程序在其他ubuntu安装上运行良好。 最佳答案 尝试:gcc-pthread而不是-lpthread。我相信,差异是显着的。后者链接到libpthread,前者链接到libpthread和其他一些东西!sem_wait是librt的一部分,因此您也可以使用gcc-lrt,但是-pthread会为您完成此操作(并

c++ - 在 CMake 中,指定所有可执行文件 target_link_libraries 某些库

在CMake中,有没有办法指定我所有的可执行文件都链接到某个库?基本上我希望我所有的可执行文件都链接到tcmalloc和分析器。简单地指定-ltcmalloc和-lprofiler不是一个好的解决方案,因为我想让CMake以可移植的方式找到库的路径。 最佳答案 您可以使用您自己的函数覆盖内置的add_executable函数,它总是添加所需的链接依赖项:macro(add_executable_name)#invokebuilt-inadd_executable_add_executable(${ARGV})if(TARGET${_

C++ 结构——毫无意义?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:WhatarethedifferencesbetweenstructandclassinC++我只是想弄清楚在C++中使用“C结构”是否本质上是无用的。使用它们(而不是简单地创建另一个类)你有什么收获吗?在C中,结构的意义很明显,分组数据的简单连续分配和访问所述数据的好方法,在C++中,我觉得这个角色变得有点模糊。鉴于您可以拥有作为结构成员、实例变量和可见性标签的函数,我在C++中看到的结构和类之间的唯一真正区别是结构成员默认为公共(public),而类成员默认为私有(private)。在我看来,它们实际上都